﻿using System.Security.Principal;
using Excell_On_Services.Models;


namespace Excell_On_Services.Infrastructure.Config
{
    public class EnhancedPrincipal// : IPrincipal
    {

        // class nay chua Employee ma get tu DB ra. Đối với mỗi Database request ta tạo ra 1 EnhancedPricncipal mới load Employee Object. và sau đó lưu cái lưu cái Principal này vào current User của MVC. Như vây xiên xuốt ứng dụng ta có thể biết được user hiện tại là ai? Để làm dc chuyen đó thì vào global.asax và hander sự kiện AuthenticateRequest (Bên trong AuthenticateRequest chúng ta đơn giản sử dụng EFEOSRepository để lấy ra user trùng cái tên với user hiện tại và sau đó lưu cái user đó vào trong class EnhancedPrinipal. và sau đó lưu cái Prinipal đó vào trong cái current User của http Request. Có trong phần đầu BlogSharp part 4)
        
        private readonly IIdentity identity;
        //private readonly Employee userData;
        //public static readonly EnhancedPrincipal Anonymous = new AnonymousPrincipal();

        //public EnhancedPrincipal(IIdentity identity, Employee userData)
        //{
        //    this.identity = identity;
        //    this.userData = userData;
        //}

        ////public bool IsInRole(string role)
        ////{
        ////    return role == "owner" && userData.IsOwner;
        ////}

        //public IIdentity Identity
        //{
        //    get { return identity; }
        //}

        //public Employee Data
        //{
        //    get { return userData; }
        //}

        //private class AnonymousIdentity : IIdentity
        //{
        //    public string Name
        //    {
        //        get { return "Anonymous"; }
        //    }

        //    public string AuthenticationType
        //    {
        //        get { return null; }
        //    }

        //    public bool IsAuthenticated
        //    {
        //        get { return false; }
        //    }
        //}

        //private class AnonymousPrincipal : EnhancedPrincipal
        //{
        //    public AnonymousPrincipal()
        //        : base(new AnonymousIdentity(), new Employee
        //        {
        //            EmployeeID = 0,
        //            FullName = "Anonymous"
        //        })
        //    {
        //    }
        //}


        //public bool IsInRole(string role)
        //{
        //    throw new System.NotImplementedException();
        //}
    }
}